/**
 * RegistroAtividadeDAOJPA.java
 * 
 * Projeto: SGA-LEDS
 * 
 * Rodrigo Soares Maia
 * IFES - Instituto Federal do Espírito Santo - Campus Serra
 */

package controleAtividades.cgd;

import controleAtividades.cdp.Atividade;
import controleInterno.cdp.Colaborador;
import controleAtividades.cdp.ColaboradorAtividade;
import controleInterno.cdp.Projeto;
import controleAtividades.cdp.RegistroAtividade;
import controleInterno.cdp.TipoAtividade;
import java.util.Calendar;
import java.util.List;
import javax.persistence.Query;
import utilitario.utilitarioPersistencia.DAO;
import utilitario.utilitarioPersistencia.DAOJPA;

public class RegistroAtividadeDAOJPA extends DAOJPA<RegistroAtividade> implements RegistroAtividadeDAO
{
    public List<RegistroAtividade> obter(Colaborador c) {
        Query query = entityManager.createQuery("SELECT r FROM RegistroAtividade r WHERE r.colaborador.colaborador.id = ?1");
        query.setParameter(1, c.getId());
        return query.getResultList();
    }
    
    public List<RegistroAtividade> obter(Atividade a) {
        Query query = entityManager.createQuery("SELECT r FROM RegistroAtividade r WHERE EXISTS (SELECT c FROM ColaboradorAtividade c WHERE c.atividade.id = ?1)");
        query.setParameter(1, a.getId());
        return query.getResultList();
    }
    
    public List<RegistroAtividade> obter(Projeto p, Colaborador c) {
        Query query = entityManager.createQuery("SELECT r FROM RegistroAtividade r WHERE r.colaborador.atividade.projeto.id = ?1 AND r.colaborador.colaborador.id = ?2");
        query.setParameter(1, p.getId());
        query.setParameter(2, c.getId());
        return query.getResultList();
    }
    
    public List<RegistroAtividade> obter(ColaboradorAtividade ca) {
        Query query = entityManager.createQuery("SELECT r FROM RegistroAtividade r WHERE r.colaborador.id = ?1");
        query.setParameter(1, ca.getId());
        return query.getResultList();
    }
    
    public List<RegistroAtividade> obter(Projeto p, Colaborador c, TipoAtividade t, Calendar inicio, Calendar fim) {
        Query query = entityManager.createQuery("SELECT r FROM RegistroAtividade r WHERE r.colaborador.atividade.projeto.id = ?1 AND r.colaborador.colaborador.id = ?2 AND r.colaborador.atividade.tipo.id = ?3 AND (r.dia BETWEEN ?4 AND ?5)");
        query.setParameter(1, p.getId());
        query.setParameter(2, c.getId());
        query.setParameter(3, t.getId());
        query.setParameter(4, inicio);
        query.setParameter(5, fim);
        return query.getResultList();
    }
    
    public List<RegistroAtividade> obter(Calendar inicio, Calendar fim) {
        Query query = entityManager.createQuery("SELECT r FROM RegistroAtividade r WHERE r.dia BETWEEN ?1 AND ?2");
        query.setParameter(1, inicio);
        query.setParameter(2, fim);
        return query.getResultList();
    }
}
